跳到主要内容

01 雅特力AT32A403开发板评测 01 开发板开箱开发环境搭建

01-雅特力AT32A403开发板评测 开箱及环境搭建流程

雅特力AT32

2023年,玩了不少的国产MCU开发板,例如武汉芯源CW32,兆易创新GD32、上海航芯ACM32、沁恒CH32V307等开发板,虽然论坛也有雅特力AT32开发板的评测活动,但是一直申请也没有申请到,一直就听说雅特力AT32在国产之间做的很好,支持力度,开发资料资源都比较丰富,甚至都有图形化配置工具了。终于,2024年申请到了,但是板子到手里面快十天了,都还没有开始玩起来,很惭愧,主要最近忙着赶论文,而且又感冒了。

接下来就开始介绍介绍雅特力AT32A403A开发板,雅特力芯片有许多类型,竟然第一次申请就拿到了车规级微控制器,特别是近几年汽车电子的快速发展,感觉得玩玩车规级微控制器的,虽然我还不知道有啥子区别,但是能通过车规级认证还是比较难的。

at-01-03

AT32A403A资源简介

雅特力科技AT32A403A系列车规级微控制器,搭载32位ARM®Cortex®-M4内核,配合先进制程可达超高效能200MHz的运算速度。内建的单精度浮点运算单元(FPU)及数字信号处理器(DSP),搭配丰富的外设及灵活的时钟控制机制,具有高集成及高性价比优势。完善的内存设计,最高可支持1MB闪存存储器(Flash)及224KB随机存取存储器(SRAM),其闪存存储器执行零等待的优异表现,超越业界同级芯片水平。

AT32A403A可运行于工业级温度范围-40~105°C,特别支持8组UART串口,2组CAN总线,还集成兼容IEEE-802.3 10/100Mbps以太网口控制器特别适用于车联网及车载影音系统,以及USB设备应用不需外挂晶振,具有同时提升终端产品的可靠度与降低成本的多重用途。相比于一般性电子产品,汽车电子对MCU的可靠性要求更高,以保障用户安全及极端环境中驾驶工作。作为雅特力首款车规级MCU产 品,AT32A403A (A : Automotive)顺利通过AEC-Q100车规级可靠性认证,满足功能安全标准车规级MCU的能力,同时可广泛适用于车身控制、ADAS辅助驾驶、车载影音、BMS等新能源车用场景,符合车用电子高可靠性和稳定性要求。遵循AEC-Q100标准,AT32A403A通过了包括加速环境应力测试、加速寿命测试、封装组装整合测试、电器特性确认测试等一系列车规级认证。

开发板资料

官网资料

https://www.arterytek.com/cn/product/AT32A403A.jsp#ProuductSelection

主要使用到就是 AT32A403A数据手册,AT32A403A用户参考手册,AT32A403A开发板硬件原理图

开发板硬件资源

AT32A403A_Firmware Library

官方提供了大量的参考例程,过于丰富

编号模块名称Examples功能描述
1acccalibrationACC校准HICK
2adccombine_mode_ordinary_simultADC主从模式之普通同时模式
3current_vref_value_checkADC检测Vref+电压
4exint_trigger_partitionedADC分割模式下使用EXINT触发转换
5internal_temperature_sensorADC使用内部温度传感器
6repeat_conversion_loop_transferADC反复转换时使用DMA的循环模式传输数据
7software_trigger_repeatADC反复模式下使用软件触发
8tmr_trigger_automatic_preemptedADC使用TMR触发普通转换结合抢占自动转换
9triple_adc_synchro_triggerADC之三ADC同步触发转换
10voltage_monitoring电压监测
11bprbpr_data电池供电域寄存器读写
12tamper入侵检测
13cancommunication_modeCAN通讯模式的使用
14filterCAN接收过滤器的使用
15loopback_modeCAN回环模式使用
16cortex_m4bit_band位带操作进行GPIO翻转和SRAM读写
17cmsis_dspDSP使用
18fpu使用硬件FPU进行函数运算
19systick_interrupt演示systick定时器中断方式
20crccalculation使用硬件CRC进行CRC计算
21crmclock_failure_detection外部时钟失效检测并系统时钟拯救
22sysclk_switch系统时钟切换
23dacdouble_mode_dma_sinewave使用DMA双路输出正弦波
24double_mode_dma_squarewave使用DMA双路输出方波
25one_dac_dma_escalator使用DMA单路输出阶梯波
26one_dac_noisewave单路输出噪声
27two_dac_trianglewave双路输出三角波
28debugtmr1调试TMR1定时器计数
29dmadata_to_gpio_flexible使用DMA弹性映射将数据从SRAM传输到GPIO
30flash_to_sram使用DMA将数据从flash传输到SRAM
31exintexint_configEXINT的基础配置
32exint_software_triggerEXINT的软件触发
33flashfap_enableflash访问保护使能
34flash_write_read内部flash读写操作
35operate_spim外部spim读写操作
36run_in_spim演示程序运行在外部spim
37gpioio_toggle演示IO翻转
38led_toggle演示LED翻转
39swjtag_remap对SWD/JTAG引脚进行复用
40i2ccommunication_dmaI2C使用DMA模式通信
41communication_intI2C使用中断模式通信
42communication_pollI2C使用轮询模式通信
43eepromI2C和EEPROM通信
44i2sfullduplex_dmaI2S使用DMA进行全双工通讯
45halfduplex_dmaI2S使用DMA进行半双工通讯
46halfduplex_interruptI2S使用中断进行半双工通讯
47spii2s_switch_halfduplex_pollingSPI_I2S在半双工轮询条件下的模式切换
48pwcdeepsleep_rtcPWC使用RTC唤醒深度睡眠模式
49power_voltage_monitorPWC使用电压监测器
50sleep_tmr2PWC使用TMR2唤醒睡眠模式
51sleep_usart1PWC使用USART1唤醒睡眠模式
52standby_rtcPWC使用RTC唤醒待机模式
53standby_wakeup_pinPWC使用待机唤醒管脚唤醒待机模式
54rtccalendarRTC实现日历功能
55lick_calibrationLICK时钟校准
56sdiosdio_fatfs基于SDIO移植应用FatFs文件系统
57sd_mmc_cardSD或MMC卡的识别/读写操作
58spicrc_transfer_pollingSPI使用轮询进行CRC传输
59fullduplex_pollingSPI使用轮询进行全双工通讯
60halfduplex_interruptSPI使用中断进行半双工通讯
61halfduplex_transceiver_switchSPI半双工下的收发模式切换
62only_receive_mode_pollingSPI使用轮训进行单线单向只收
63use_jtagpin_hardwarecs_dmaSPI映射到JTAG脚并使用DMA进行硬件CS通讯
64w25q_flashSPI与W25Qxx Flash通讯
65tmr6_steps演示如何配置六步方波
667_pwm_output演示如何配置TMR1产生7路PWM输出
67cascade_synchro实现3个TMR的串联同步
68complementary_signals使用TMR1实现互补信号输出
69dma使用TMR1 overflow事件产生DMA请求
70dma_burst演示如何使用定时器DMA burst功能
71encoder_tmr2演示定时器编码器接口模式
72external_clock演示如何使用外部时钟模式
73hall_xor_tmr2演示定时器输入异或功能
74hang_mode演示如何使用挂起模式
75input_capture演示输入捕获功能
76oc_high使用输出控制High模式
77oc_low使用输出控制Low模式
78oc_toggle_tmr3使用TMR3输出控制Toggle模式
79oc_toggle_tmr9使用TMR9输出控制Toggle模式
80one_cycle使用单周期模式
81parallel_synchro实现3个TMR的并联同步
82pwm_input演示PWM输入捕获功能
83pwm_input_dma使用DMA的PWM输入捕获功能
84pwm_output_simulate演示模拟PWM输出功能
85pwm_output_tmr10演示TMR10的PWM输出
86pwm_output_tmr3演示TMR3的PWM输出
87timer_base演示定时器计数基本功能
88tmr1_synchro演示TMR1的同步功能
89tmr2_32bit使用32bit定时器
90usarthalf_duplex使用单线半双工收发
91hw_flow_control使用硬件流控通信
92idle_detection空闲帧中断检测
93interrupt使用中断方式收发数据
94irda红外模式通讯
95polling使用轮询方式收发数据
96printf使用串口打印字符
97receiver_mute收到匹配ID退出接收静默模式
98rs485基于AT32-Comm-EV Board的RS485通信
99smartcard智能卡应用
100synchronous通过同步模式与SPI通信
101transfer_by_dma_interrupt使用DMA中断方式实现数据收发
102transfer_by_dma_polling使用DMA轮询方式实现数据收发
103usb_deviceaudioUSB音频实现speaker和microphone
104composite_audio_hid实现音频和HID复合设备
105composite_vcp_keyboard实现虚拟串口和键盘复合设备
106composite_vcp_msc实现虚拟串口和mass storage复合设备
107custom_hid实现USB自定义HID
108keyboardUSB键盘设备
109mouseUSB鼠标设备
110msc使用内部flash实现mass storage设备
111printerUSB打印机设备
112vcp_loopbackUSB虚拟串口设备
113virtual_comportUSB转串口
114virtual_msc_iap利用虚拟mass storage实现IAP升级功能
115wdtwdt_reset看门狗使用
116wdt_standbystandby模式下看门狗使用
117wwdtwwdt_reset窗口看门狗使用
118xmclcd_8bit驱动8080并口LCD
119lcd_touch_16bit驱动16位并口LCD
120nandNAND FLASH储存器读写访问
121psramPSRAM存储器读写访问

环境搭建流程参考

基本上大多数的工程模板都是采用MDK-KEIL开发的,一般开发人员都安装好了,基本上没有啥子好说的。

基本上只要安装这个pack包就可以了。ArteryTek.AT32A403A_DFP.2.0.3.pack

我们以at_start_a403a 里面的工程作为基础,搭建自己的工程模板。以GPIO的工程为基础模板,当然其他的Example同样可以,这里面的基本案例都是值得学习的。

  1. at_start_a403a 包含大量开发例程,其中examples是各个外设案例demo,template是各个开发工具的工程模板,而且支持工具版本比较多,这一点是在其他国产mcu例程资料比较少的,绝大多数都是清一色的MDK-KEIL,其次就是IAR工程,像官方的at32_ide,gcc工程模板是比较有特色的。

  1. 学习外设参考案例 (adc,dac,gpio,timer,i2c,spi,can等)

    在这里我们选择了gpio的led_toggle工程模板,毕竟点灯是万万不能少的

  1. 打开led_toggle工程,编译代码,编译0错误0警告。

    at32的led_toggle工程模板的整体命名风格其实和我个人的风格比较相似,所以好感度比较高。

    个人的工程模板文件参考架构如下:

    1. Application 主函数,应用层代码
    2. BspDrivers 板级驱模块动文件
    3. Drivers 底层驱动库文件 Firmware Library
    4. Project 工程文件

  2. 准备下载代码

    板子板载了AT-link(本质上就是DAP),不需要其他的工具,很方便的就下载程序了。

  1. 观察开发板现象,流水灯现象

    #include "at32a403a_board.h"
    #include "at32a403a_clock.h"


    /** @addtogroup AT32A403A_periph_examples
    * @{
    */

    /** @addtogroup 403A_GPIO_led_toggle GPIO_led_toggle
    * @{
    */

    /**
    * @brief main function.
    * @param none
    * @retval none
    */
    int main(void)
    {
    system_clock_config();

    at32_board_init();

    while(1)
    {
    at32_led_toggle(LED2);
    delay_ms(200);
    at32_led_toggle(LED3);
    delay_ms(200);
    at32_led_toggle(LED4);
    delay_ms(200);
    }
    }

    1. 打开usart_printf工程,测试串口打印功能
    #include "at32a403a_board.h"
    #include "at32a403a_clock.h"

    /** @addtogroup AT32A403A_periph_examples
    * @{
    */

    /** @addtogroup 403A_USART_printf USART_printf
    * @{
    */

    __IO uint32_t time_cnt = 0;

    /**
    * @brief main function.
    * @param none
    * @retval none
    */
    int main(void)
    {
    system_clock_config();
    at32_board_init();
    uart_print_init(115200);

    /* output a message on hyperterminal using printf function */
    //printf("usart printf example: retarget the c library printf function to the usart\r\n");
    printf("Hardware_Init [ok] \r\n");
    printf("at_start_a403a board testing 2024-1-26\r\n");
    while(1)
    {
    printf("at32_led_toggle example start \r\n");
    at32_led_toggle(LED2);
    delay_ms(200);
    at32_led_toggle(LED3);
    delay_ms(200);
    at32_led_toggle(LED4);
    delay_ms(200);
    printf("at32_led_toggle example end \r\n");
    printf("usart printf counter: %u\r\n",time_cnt++);
    delay_sec(1);
    }
    }